'''
 该案例演示序列(list)
'''
# list = [1,2,3,4,5,6]
# print(list)
# print(type(list))
# 1> 通过索引获取元素
# print(list[1])
# print(list[-1])

#2> 列表的切片
# list[start:stop:step]
#      start:从什么位置开始切    包含
#      stop:从什么位置结束      不包含
#      step:步长              元素之间的距离

# 复制整个列表
# list1 = list[0:len(list)]
# print(list1)
# print(id(list))
# print(id(list1))
# print(list[:])   #同样是复制

# 从索引2开始到4(不包含)的元素
# list1  = list[1:4]
# print(list1)

# 从索引2开始到末尾的元素
# list1  = list[2:]  # 等价于 list1  = list[2:0]
# print(list1)

# 从索引0开始到2(不包含)的元素
# list1  = list[:2]    # 等价于 list1  = list[0:2]
# print(list1)
#
#
# # 从索引2开始到-1的元素
# list1  = list[2:-1]
# print(list1)
#
# # 倒序取元素
# list1  = list[::-1]
# print(list1)

# list切片
# 如果步长是现在正数,从左到右方向去切片,起始的索引必须在结束索引的左边
# print(list[3:0:1])  # []
# # 如果步长是现在负数,从右到左方向去切片,起始的索引必须在结束索引的右边
# print(list[0:3:-1])  # []

# range
# 如果步长是现在正数,生成的数列是递增,start < stop
#  如果步长是现在负数,生成的数列是递减,start > stop
# print(range(0,10,1))

# 向列表中添加元素
# list = [1,2,3,4,5,6]
# # list.insert(3,10)  #指定索引位置添加元素
# list.append(800)   # 将元素添加到最后
# print(list)

# 列表相加
# list1 = [1,2,3,4,5,6]
# list2= [6,7,8,9]
# list3 = list1 + list2   #[1, 2, 3, 4, 5, 6, 6, 7, 8, 9]
# print(list3)

# 列表相乘
# list1 = [1,2,3,4,5,6]
# print(list1*3)   # 变成了  [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]

# 修改列表元素
# list1 = [1, 2, 3, 4, 5, 6]
# # 1> 下标定位修改元素
# # list1[2] = "a"
# # print(list1)   # [1, 2, 'a', 4, 5, 6]
# # 2> 修改列表元素--通过切片
# list1[1:3] = ["a", "b"]
# print(list1) #[1, 'a', 'b', 4, 5, 6]

# 判断成员是不是列表元素
# list1 = [1, 2, 3, 4, 5, 6]
# print(3 in list1)  #true
#
# # 获取列表的长度
# list1 = [1, 2, 3, 4, 5, 6]
# print(len(list1))  #6

# # 列表中求和,最小值和最大值
# list1 = [1, 2, 3, 4, 5, 6]
# print(sum(list1))
# print(max(list1))
# print(min(list1))

# 遍历列表
# list = [1,2,3,4,5,6,7,8,9]
# for in 遍历
# for item in list:
#     print(item,end="")

# 通过下标获取列表中的元素
# list[下标]
# 循环次数 len(list)
# for循环,先生成一个序列,起始值要和下标对应,从0开始
# for i in range(0,len(list)):
#     print(i,list[i]

# 不使用for循环
# 使用enumerate 获取下标和元素
# for i,item in enumerate(list):
#     print(i,item)

# 删除列表中的元素
# 通过del语句删除元素
# del list[1]
# print(list)

# list.remove(x)  根据元素来删除 删除第一次出现的元素  没有返回值 (None)
# list.insert(1,1)  #[1, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# print(list)
# list.remove(1)
# print(list)   #[1, 2, 3, 4, 5, 6, 7, 8, 9]
#
# # list.pop()   # 根据索引来删 没有会报错
# list.pop(3)
# print(list) #删除[1, 2, 3, 5, 6, 7, 8, 9]


# list2 = [[1,2,3],[4,5,6],[7,8,9]]
# for item in list2:
#     print(item)

# 在当前序列,遍历,遍历的数据*2
# for item in range(5):
#     print(item *2)

# 列表推导式 在已经存在的可迭代对象的基础上,通过运算或者过滤.得到新的列表
# 基础列表推导式
# list2 = [i*2 for i in range(5)]
# print(list2)  #[0, 2, 4, 6, 8]
#
# # 带条件的列表推导式
# list3 = [x * 2 for x in range(10) if x % 2==0]
# print(list3) #[0, 4, 8, 12, 16]
#
# # 那现有的数据做列表推导式
# list = [1,2,3,4,5,6,7,8,9]
# list4 = [i*2 for i in list]
# print(list4)  # [2, 4, 6, 8, 10, 12, 14, 16, 18]

#  包含多个循环列表推导式
# list1 = ['a',"b","c"]
# list2 = [1,2,3]
# list4 = [{i:j} for i in list1 for j in list2]
# print(list4)  # [{'a': 1}, {'a': 2}, {'a': 3}, {'b': 1}, {'b': 2}, {'b': 3}, {'c': 1}, {'c': 2}, {'c': 3}]
# list5 = [(i,j) for i in list1 for j in list2]
# print(list5) #[('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('b', 3), ('c', 1), ('c', 2), ('c', 3)]

# zip 拉链函数
list1 = ['a',"b","c"]
list2 = [1,2,3,4]
zipped = zip(list1,list2)
list4 =list(zipped)
for item in list4:
    print(item)
for item in list4:
    print(item)